import { number } from '@intlify/core-base'
import { SuperEntity } from '../common/types'
import { DbType } from '../data-manage/types'
import { Property } from '../task-instances/types'
type TaskType =
  | 'SHELL'
  | 'PYTHON'
  | 'SQL'
  | 'SPARK'
  | 'FLINK'
  | 'DATAX'
  | 'DATA_QUALITY'
  | 'HTTP'
  | 'MR'
  | 'EMR'
  | 'SEATUNNEL'
  | 'PROCEDURE'
  | 'PIGEON'
  | 'SUB_PROCESS'
  | 'DEPENDENT'
  | 'CONDITIONS'
  | 'SWITCHS'
  | 'BLOCKING'
  | 'SPARK_JAR'
  | 'SPARK_SQL'
  | 'PYSPARK'
  | 'VISUAL'
  | 'FLINK_JAR'
  | 'FLINK_SQL'
  | 'MR_JAR'
  | 'MR_PY'
  | 'ALERT'
interface TaskDefined extends SuperEntity {
  name: string
  description: string
  taskType: string
  proId: number
  proName: string
  owners: string[]
}

interface ResourceInfo extends SuperEntity {
  parentId: number
  name: string
  resourceType: string
  description: string
  proId: number
  creator: string
  fileUrl: string
  urlQuoteId: number
  childs: ResourceInfo[]
}

interface UdfDefined extends SuperEntity {
  name: string
  description: string
  dbType: string
  funcName: string
  className: string
  proId: number
  creator: string
  resourceId: number
  resourceName: string
  resourceUrl: string
}
interface TaskParams {
  // 本地参数集合
  localParams: Property[]
  // 依赖资源id集合
  resourceIds: number[]
  // 依赖资源引用id集合
  resourceQuoteIds: number[]
  // 执行节点id
  workerGroupId: number
  // 环境配置id
  environmentId: number
  // 失败重试次数
  failRetryTimes: number | null
  // 失败重试间隔
  failRetryInterval: number | null
}

interface TaskDefinedLog extends SuperEntity {
  //  版本号
  version: number
  //  版本描述
  versionDesc: string
  //  作业id
  taskDefinedId: number
  //  作业类型
  taskType: TaskType
  //  作业参数
  taskParams: TaskParams
  //  发布状态
  releaseState: boolean
  //  创建者
  creator: string
}
interface DataXReaderColumn {
  // 字段名
  name: string
  // 数据类型
  type: string
  // 数据格式
  format: string
}
interface ReaderParams {
  // 数据源类型
  dbType: DbType
  // 数据源id
  datasourceId: number
  // 数据库名称
  dbName: string
  // 数据表
  tbName: string
  // where过滤条件
  where: string
  // 切片列
  splitPk: string
  // 资源id
  resourceId: number
  // 资源名称
  resourceName: string
  // 资源文件url
  resourceUrl: string
  // 字符集
  encoding: string
  // 分隔符
  fieldDelimiter: string
  // 数据列集合
  columns: DataXReaderColumn[]
}
type WriteMode = 'insert' | 'replace' | 'update' | 'into' | 'overwrite'
interface DataXWriterColumn {
  // 字段名
  name: string
  // 数据类型
  type: string
  // 默认值
  defVal: string
}
interface WriterParams {
  // 数据源类型
  dbType: DbType
  // 数据源id
  datasourceId: number
  // 数据库名
  dbName: string
  // 数据表
  tbName: string
  // 写入方式
  writeMode: WriteMode
  // 数据列集合
  columns: DataXWriterColumn[]
}
interface DataxTaskContent {
  // 源表参数
  reader: ReaderParams
  // 目标表参数
  writer: WriterParams
  // 并发数
  speedChannel: number
  // 错误数据量限制
  errorLimitRecord: number
  // 错误数据比例限制
  errorLimitPercentage: number
}

interface DataXTaskLog extends TaskDefinedLog {
  taskContent: DataxTaskContent
}

export {
  TaskType,
  TaskDefined,
  TaskDefinedLog,
  ResourceInfo,
  UdfDefined,
  DataXTaskLog,
  DataXReaderColumn,
  DataXWriterColumn
}
